import axios from 'axios'

// 创建axios实例
const http = axios.create({
  baseURL: '/', // 相对于当前域名的根路径，确保请求能被Vite代理正确处理
  timeout: 10000,
  headers: {
    'Content-Type': 'application/json'
  }
})

// 请求拦截器
http.interceptors.request.use(
  (config) => {
    // 检查是否在浏览器环境中
    if (typeof window !== 'undefined') {
      let token = ''
      
      try {
        // 优先从localStorage中直接获取token，确保同步性
        if (window.localStorage) {
          const storedToken = localStorage.getItem('token')
          if (storedToken) {
            token = storedToken
            // 严格按照后端要求的格式：Bearer(空格)+token
            config.headers.Authorization = `Bearer ${token}`
            console.log('从localStorage获取并设置token成功')
          } else {
            console.warn('localStorage中未找到token')
          }
        }
        
        // 增加额外的检查：确保Authorization头存在且格式正确
        if (!config.headers.Authorization || !config.headers.Authorization.startsWith('Bearer ')) {
          console.warn('请求中缺少有效的Authorization头')
        }
      } catch (e) {
        console.error('获取token失败:', e.message)
      }
    }
    return config
  },
  (error) => {
    return Promise.reject(error)
  }
)



// 响应拦截器
http.interceptors.response.use(
  (response) => {
    // 直接返回响应数据
    return response.data
  },
  (error) => {
    console.error('HTTP请求错误:', error)
    
    // 处理连接被拒绝错误
    if (error.code === 'ECONNREFUSED') {
      console.error('后端服务未启动或连接被拒绝，请确保后端服务正在运行')
    }
    
    // 处理403错误（权限不足/未登录）
    if (error.response && error.response.status === 403) {
      console.error('403权限错误：后端验证token失败，当前请求被拒绝访问')
      
      // 清除无效token并更新用户状态
      try {
        // 优先通过用户存储清除token，确保状态一致性
        import('@/stores/user').then(({ useUserStore }) => {
          const userStore = useUserStore()
          userStore.logout()
          console.log('无效token已清除，用户已登出')
        })
      } catch (e) {
        // 降级方案：直接清除localStorage中的token
        console.warn('通过用户存储清除token失败，尝试直接清除localStorage')
        try {
          if (typeof window !== 'undefined' && window.localStorage) {
            localStorage.removeItem('token')
          }
        } catch (ee) {
          console.error('清除token失败:', ee)
        }
      }
      
      // 重定向到登录页面，但避免重复重定向
      if (typeof window !== 'undefined' && !window.location.pathname.includes('/login')) {
        console.log('重定向到登录页面')
        window.location.href = '/login'
      }
    }
    
    return Promise.reject(error)
  })

// 导出axios实例，直接访问后端API
export default http